/*
 * @Author: xuetao 3168581151@qq.com
 * @Date: 2025-01-06
 * @LastEditors: xuetao 3168581151@qq.com
 * @LastEditTime: 2025-01-29
 * @Description:  自定义圆角头像组件
 */
import 'package:flutter/material.dart';

class CustomSquareAvatar extends StatelessWidget {
  final String? imageUrl; // 用户头像的图片地址，可以为空
  final double size; // 头像的宽高
  final double borderRadius; // 圆角半径
  final Color backgroundColor; // 背景颜色（当使用Icon时）
  final IconData? icon; // 用于展示的图标（如果没有图片）

  const CustomSquareAvatar({
    Key? key,
    this.imageUrl,
    this.size = 60.0, // 默认头像大小为60
    this.borderRadius = 10.0, // 默认圆角半径为10
    this.backgroundColor = Colors.blue, // 默认背景颜色为蓝色
    this.icon = Icons.person, // 默认不使用图标
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: size,
      height: size,
      decoration: BoxDecoration(
        color: backgroundColor, // 背景颜色
        borderRadius: BorderRadius.circular(borderRadius), // 圆角
      ),
      child: ClipRRect(
        borderRadius: BorderRadius.circular(borderRadius),
        child: _buildImage(), // 构建图片或图标
      ),
    );
  }

  // 构建网络图片或本地图片
  Widget _buildImage() {
    // 判断 imageUrl 是否为空，如果为空则返回默认图标
    if (imageUrl == null || imageUrl!.isEmpty) {
      return _buildIcon(); // 没有图片时显示图标
    }

    // 判断 URL 是否为网络图片
    Uri? uri = Uri.tryParse(imageUrl!);
    if (uri != null && uri.isAbsolute) {
      // 网络图片
      return Image.network(
        imageUrl!,
        width: size,
        height: size,
        fit: BoxFit.fill,
        errorBuilder: (context, error, stackTrace) {
          // 网络图片加载失败时，显示默认图标
          return _buildIcon();
        },
      );
    } else {
      // 本地图片（在 assets 中）
      return Image.asset(
        imageUrl!, // 使用正确的相对路径
        width: size,
        height: size,
        fit: BoxFit.fill,
        errorBuilder: (context, error, stackTrace) {
          // 本地图片加载失败时显示默认图标
          return _buildIcon();
        },
      );
    }
  }

  // 构建Icon
  Widget _buildIcon() {
    return Center(
      child: icon != null
          ? Icon(
              icon,
              size: size / 2, // 图标大小为头像的一半
              color: Colors.white, // 图标颜色为白色
            )
          : null, // 如果没有传入图标，显示空白
    );
  }
}
